package com.xiaoshuidi.cloud.module.contract.controller.admin.bill.vo.rentOrder;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

import static com.xiaoshuidi.cloud.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;

/**
 * 管理后台 - 账单 Excel 导出 Request VO，参数和 RentOrderPageReqVO 是一致的
 */
@Schema(description = "管理后台 - 账单 Excel 导出 Request VO，参数和 RentOrderPageReqVO 是一致的")
@Data
public class RentOrderExportReqVO {

    /**
     * 用于财务流水的主键
     */
    @Schema(description = "用于财务流水的主键")
    private String uuid;

    /**
     * 账单编号
     */
    @Schema(description = "账单编号")
    private String orderNo;

    /**
     * 序号
     */
    @Schema(description = "序号")
    private Long num;

    /**
     * 支付流水号
     */
    @Schema(description = "支付流水号")
    private String tradeSerialNo;

    /**
     * 业务id 如 合同id 、预定id
     */
    @Schema(description = "业务id 如 合同id 、预定id")
    private Long businessId;

    /**
     * 公寓id
     */
    @Schema(description = "公寓id")
    private Long apartmentId;

    /**
     * 公寓名称
     */
    @Schema(description = "公寓名称")
    private String apartmentName;

    /**
     * 房间id
     */
    @Schema(description = "房间id")
    private String roomId;

    /**
     * 房间名称
     */
    @Schema(description = "房间名称")
    private String roomName;

    /**
     * 此订单开始时间
     */
    @Schema(description = "此订单开始时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDate startTime;

    /**
     * 此订单结束时间
     */
    @Schema(description = "此订单结束时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDate endTime;

    /**
     * 租金金额
     */
    @Schema(description = "租金金额")
    private BigDecimal amount;

    /**
     * 原押金
     */
    @Schema(description = "原押金")
    private BigDecimal oldDeposit;

    /**
     * 押金金额
     */
    @Schema(description = "押金金额")
    private BigDecimal deposit;

    /**
     * 租金押金金额
     */
    @Schema(description = "租金押金金额")
    private BigDecimal rentDeposit;

    /**
     * 租金押金水电气等金额
     */
    @Schema(description = "租金押金水电气等金额")
    private BigDecimal rentUtilities;

    /**
     * 优惠前原租金
     */
    @Schema(description = "优惠前原租金")
    private BigDecimal rawAmount;

    /**
     * 优惠金额
     */
    @Schema(description = "优惠金额")
    private BigDecimal discountAmount;

    /**
     * 原租金押金水电气等金额
     */
    @Schema(description = "原租金押金水电气等金额")
    private BigDecimal initialRentUtilities;

    /**
     * 已收账单总额
     */
    @Schema(description = "已收账单总额")
    private BigDecimal paidRentUtilities;

    /**
     * 支付状态(unpaid 待支付 |payment 已支付|part  部分支付),
     */
    @Schema(description = "支付状态(unpaid 待支付 |payment 已支付|part  部分支付),")
    private String payStatus;

    /**
     * 付款方式(0 alipay 支付宝 |1 dida 滴答付 |2 weixin 微信 |3 cash 现金 |4 bank 银行转账|5 system 系统标记为已支付|6 pos 线下POS |7 h2ome 水滴金融 |8 llian 连连支付 |9,  other 其他 |10 allinpay 银行卡在线支付|11 allinpaywx 微信在线支付|12 allinpayh5 银行卡小额支付 |13 pinganwx 微信支付 |14 daikou 银行代扣|15 ldpay 快捷支付|16 ldalipay 支付宝支付,
     */
    @Schema(description = "付款方式(0 alipay 支付宝 |1 dida 滴答付 |2 weixin 微信 |3 cash 现金 |4 bank 银行转账|5 system 系统标记为已支付|6 pos 线下POS |7 h2ome 水滴金融 |8 llian 连连支付 |9,  other 其他 |10 allinpay 银行卡在线支付|11 allinpaywx 微信在线支付|12 allinpayh5 银行卡小额支付 |13 pinganwx 微信支付 |14 daikou 银行代扣|15 ldpay 快捷支付|16 ldalipay 支付宝支付,")
    private String payMethod;

    /**
     * 此订单支付时间
     */
    @Schema(description = "此订单支付时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDate oughtPayTime;

    /**
     * 此订单最晚支付时间
     */
    @Schema(description = "此订单最晚支付时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDate deadlinePayTime;

    /**
     * 此订单实际支付时间
     */
    @Schema(description = "此订单实际支付时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime actualPayTime;

    /**
     * 结算状态(0, 未结算|1, 已结算),
     */
    @Schema(description = "结算状态(0, 未结算|1, 已结算),")
    private Integer payOutStatus;

    /**
     * 已经提醒次数
     */
    @Schema(description = "已经提醒次数")
    private Integer remindTimes;

    /**
     * 上次提醒时间
     */
    @Schema(description = "上次提醒时间")
    private LocalDate lastRemindTimes;

    /**
     * 事务处理状态(0 默认| 1 已编辑 | 2 已发送),
     */
    @Schema(description = "事务处理状态(0 默认| 1 已编辑 | 2 已发送),")
    private Integer todoStatus;

    /**
     * 是否需要读表
     */
    @Schema(description = "是否需要读表")
    private Integer isMeterNeed;

    /**
     * 审批状态(notReview  无需审核|inReview 审核中|effective 已生效|(reject 已驳回)
     */
    @Schema(description = "审批状态(notReview  无需审核|inReview 审核中|effective 已生效|(reject 已驳回)")
    private String approvedStatus;

    /**
     * 账单类型 default 合同账单| custom 杂费账单| free  免租期账单| meter  抄表账单| carry 结转账单 | owner 业主账单
     */
    @Schema(description = "账单类型 default 合同账单| custom 杂费账单| free  免租期账单| meter  抄表账单| carry 结转账单 | owner 业主账单")
    private String orderType;

    /**
     * 支付次数
     */
    @Schema(description = "支付次数")
    private Integer payTimes;

    /**
     * 是否已清算
     */
    @Schema(description = "是否已清算")
    private Integer cleared;

    /**
     * 账单归属人
     */
    @Schema(description = "账单归属人")
    private Integer roommateId;

    /**
     * 手机号
     */
    @Schema(description = "手机号")
    private String phone;

    /**
     * 核销状态
     */
    @Schema(description = "核销状态")
    private Integer writeOffStatus;

    /**
     * 付款人
     */
    @Schema(description = "付款人")
    private String payer;

    /**
     * 电子发票开票状态
     */
    @Schema(description = "电子发票开票状态 ")
    private Integer invoiceStatus;

    /**
     * 收款备注
     */
    @Schema(description = "收款备注")
    private String receivePaymentComments;

    /**
     * 备注
     */
    @Schema(description = "备注")
    private String remark;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDate createTime;

}
